/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Congresos;

import persona.Autor;
import java.util.ArrayList;
import java.io.Serializable;
import persona.Ponente;
import persona.Revisor;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Calendar;

/**
 *
 * @author alejandro.suarez3
 */
public class Trabajo implements Serializable {

    private String titulo;
    private String resumen;
    private String fichero;
    private Ponente ponente;
    private ArrayList<Revisor> revisor;
    private ArrayList<Float> calificacion;
    private ArrayList<Autor> usuarios;
    private String tematica;
    private ArrayList<String> subTematicas;
    private GregorianCalendar fechaRevision;
    private Hashtable<String,Float> notas;
    private Hashtable<String,GregorianCalendar> fechas;

    public Trabajo(String titulo) {
        setTitulo(titulo);
        resumen = null;
        fichero = null;
        ponente = null;
        revisor = new ArrayList<Revisor>();
        calificacion = new ArrayList<Float>();
        usuarios = new ArrayList<Autor>();
        tematica = null;
        subTematicas = new ArrayList<String>();
        fechaRevision= new GregorianCalendar();//mirar que dato se le mete
        notas=new Hashtable<String,Float>();
        fechas= new Hashtable<String,GregorianCalendar>();

        
    }

    public Trabajo(String titulo, String resumen, String fichero, ArrayList<Autor> usuarios, String tematica, ArrayList<String> subTematicas) {

        setTitulo(titulo);
        setResumen(resumen);
        setTematica(tematica);
        this.subTematicas = new ArrayList<String>();
        setSubTematicas(subTematicas);
        setFichero(fichero);
        this.usuarios = new ArrayList<Autor>();
        setUsuarios(usuarios);
        ponente = null;
        this.revisor= new ArrayList<Revisor>();
        this.calificacion = new ArrayList<Float>();
         fechaRevision= new GregorianCalendar();
        notas=new Hashtable<String,Float>();
        fechas= new Hashtable<String,GregorianCalendar>();
         
    }

    public Hashtable<String, GregorianCalendar> getFechas() {
        return fechas;
    }

    public void setFechas(String dni,GregorianCalendar fecha) {
        if (fechas.containsKey(dni)){
            fechas.remove(dni);
            fechas.put(dni, fecha);
           
        }
      else
             fechas.put(dni, fecha);
    }

   

    public Hashtable<String, Float> getNotas() {
        return notas;
    }

    public void setNotas(String Dni, float calificacion) {

        if (calificacion <= 5.0 && calificacion >= 0.0) {

            if (notas.containsKey(Dni)) {

                notas.remove(Dni);
                notas.put(Dni, calificacion);
                System.out.println("Nota modificada Correctamente");

            } else {

                notas.put(Dni, calificacion);
                System.out.println("Nota añadida correctamente");
            }

        } else {
            System.out.println("La calificacion es incorrecta");
        }


    }

    
    
    
    
    
    
    public void setUsuarios(ArrayList<Autor> usuarios) {
        for (int i = 0; i < usuarios.size(); i++) {
            setUsuarios(usuarios.get(i));
        }
    }

    public GregorianCalendar getFechaRevision() {
        return fechaRevision;
    }

    public void setFechaRevision(GregorianCalendar fechaRevision) {
        this.fechaRevision = fechaRevision;
    }
    
    
    public void setSubTematicas(){
        this.subTematicas = new ArrayList<String>();
    }

    public void setUsuarios(Autor usuario) {
        int chequeo = 0;
        for (int j = 0; j < this.usuarios.size(); j++) {
            if (this.usuarios.get(j).getDni().equals(usuario.getDni())) {
                chequeo = 1;
                break;
            }
        }
        if (chequeo == 0) {
            this.usuarios.add(usuario);
        }      
    }

    public void setSubTematicas(ArrayList<String> subTematicas) {
        if (tematica != null) {
            for (int i = 0; i < subTematicas.size(); i++) {
                setSubTematicas(subTematicas.get(i));
            }
        } else {
            System.out.println("Antes de introducir las subtematicas debe introducir una subtematica");
        }
        if (this.subTematicas.size()<=1){
            System.out.println("Las subtematicas introducidas son insuficientes");
            this.subTematicas.clear();
        }
    }

    public void setSubTematicas(String subTematica) {
        int chequeo = 1;
        if (tematica != null) {
            if (tematica.equals("arquitectura")) {
                if (subTematica.equals("computadores") || subTematica.equals("software") || subTematica.equals("hardware")) {
                    chequeo = 0;
                }

            } else if (tematica.equals("inteligencia artificial")) {
                if (subTematica.equals("robotica") || subTematica.equals("computacion") || subTematica.equals("espacio")) {
                    chequeo = 0;
                }
            } else if (tematica.equals("ingenieria del software")) {
                if (subTematica.equals("gestion") || subTematica.equals("redes") || subTematica.equals("sistemas")) {
                    chequeo = 0;
                }
            }
            if (chequeo == 0) {
                for (int j = 0; j < this.subTematicas.size(); j++) {
                    if (this.subTematicas.get(j).equals(subTematica)) {
                        chequeo = 1;
                        break;
                    }

                }
                if (chequeo == 0) {
                    this.subTematicas.add(subTematica);
                } 
            } else {
                System.out.println("La subtematica " + subTematica + " introducida es incorrecta");
            }
        } else {
            System.out.println("Antes de introducir las subtematicas debe introducir una tematica");
        }

    }

    public void setCalificacion(Float calificacion) {
        if (calificacion <= 5.0 && calificacion >= 0.0) {
            this.calificacion.add(calificacion);
        } else {
            System.out.println("La calificacion es incorrecta");
           }

    }

    public void setFichero(String fichero) {
       if (fichero.contains(".txt"))
        this.fichero = fichero;
       else{
           this.fichero=null;
            System.out.println("El formato del fichero es incorrecto");
       }
          
    }

    public void setPonente(Ponente ponente) {
        this.ponente = ponente;
    }

    public void setResumen(String resumen) {
       if (resumen.length()<=500)
        this.resumen = resumen;
       else{
           this.resumen=null;
            System.out.println("Se a excedido el numero masimo de caracteres");
       }
          
    }

    public void setRevisor(Revisor revisor) {
        this.revisor.add(revisor);
    }
    public void setRevisor(ArrayList<Revisor> revisor) {
       for (int i=0;i<revisor.size();i++){
           setRevisor(revisor.get(i));
       }

    }

    public void setTematica(String tematica) {
        if (tematica.equals("arquitectura") || tematica.equals("inteligencia artificial") || tematica.equals("ingenieria del software")) {
            this.tematica = tematica;
        } else {
            this.tematica = null;
            System.out.println("La tematica que a introducido es incorrecta");
             }


    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public ArrayList<Float> getCalificacion() {
        return (ArrayList<Float>) calificacion.clone();
    }

    public String getFichero() {
        return fichero;
    }

    public Ponente getPonente() {
        return ponente;
    }

    public String getResumen() {
        return resumen;
    }

    public ArrayList<Revisor> getRevisor() {
        return (ArrayList<Revisor>) revisor.clone();
    }

    public ArrayList<String> getSubTematicas() {
        return (ArrayList<String>) subTematicas.clone();
    }

    public String getTematica() {
        return tematica;
    }

    public String getTitulo() {
        return titulo;
    }

    public ArrayList<Autor> getUsuarios() {
        return (ArrayList<Autor>) usuarios.clone();
    }
}
